我正在看这个子表达式(这是在JavaScript中):
(?:^|.....)
我知道吗?当它跟随一个角色时意味着"零次或一次",但不确定它在这种情况下意味着什么.
使用组时,通常有几个选项可以修改组的行为:
(foo) // default behavior, matches "foo" and stores a back-reference (?:foo) // non-capturing group: matches "foo", but doesn't store a back-ref (?i:foo) // matches "foo" case-insensitively (?=foo) // matches "foo", but does not advance the current position // ("positive zero-width look-ahead assertion") (?!foo) // matches anything but "foo", and does not advance the position // ("negative zero-width look-ahead assertion")
仅举几例.
它们都以"?"开头,这是表示组修饰符的方式.在这种情况下,问号与可选性无关.
它简单地说:
(?:^foo) // match "foo" at the start of the line, but do not store a back-ref
有时候,对于你不会使用的比赛的某些部分,存储一个反向引用是有点过分的.当组只存在一个复杂的表达式原子(例如它应该匹配或作为一个整体失败)时,存储反向引用是不必要的资源浪费,甚至可以减慢正则表达式.有时候,你只想成为第一组与你相关的第一组,而不是正则表达式中的第一组.
你可能在这种情况下看到了它
(?:...)
这意味着该组不会被捕获或用于反向引用.
编辑:反映您修改后的问题:
(?:^|....)
表示"匹配行的开头或匹配..."但不捕获该组或将其用于反向引用.